#include <iostream>

using namespace std;
#include <vector>

//class Solution {
//public:
//    void duplicateZeros(vector<int>& arr) {
//        int cur = 0;
//        int dest = -1;
//        while (cur < arr.size())
//        {
//            if (arr[cur] == 0)
//                dest += 2;
//            else
//                dest++;
//            if (dest >= arr.size() - 1)
//                break;
//            cur++;
//        }
//
//        if (dest == arr.size())
//        {
//            arr[dest - 1] = arr[cur];
//            dest -= 2;
//            --cur;
//        }
//
//        while (cur >= 0)
//        {
//            arr[dest--] = arr[cur];
//            if (arr[cur] == 0)
//            {
//                arr[dest--] = arr[cur];
//            }
//            cur--;
//        }
//    }
//};

class Solution {
public:
    bool isHappy(int n) {
        int slow = n;
        int fast = n;
        while (1)
        {
            int sum1 = 0;
            while (slow)
            {
                sum1 += (slow % 10) * (slow % 10);
                slow /= 10;
            }
            int k = 2;
            int sum2 = 0;
            while (k--)
            {
                sum2 = 0;
                while (fast)
                {
                    sum2 += (fast % 10) * (fast % 10);
                    fast /= 10;
                }
                fast = sum2;
            }

            if (sum1 == sum2 && sum1 == 1)
            {
                return true;
            }
            else if (sum1 == sum2 && sum1 != 1)
            {
                return false;
            }
            else
            {
                fast = sum2;
                slow = sum1;
            }
        }

        return -1;
    }
};

int main()
{
    cout << Solution().isHappy(19) << endl;
    return 0;
}